package cn.ztr.ymcc.utils;



import cn.ztr.ymcc.jwt.JwtUtils;
import cn.ztr.ymcc.jwt.PayLoadData;
import cn.ztr.ymcc.jwt.Payload;
import cn.ztr.ymcc.jwt.RsaUtils;
import cn.ztr.ymcc.util.StrUtils;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;

import org.mockito.internal.util.StringUtil;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.security.PublicKey;

//登录上下文，把登录的相关信息放到这里面，方便调用
// 问题1：不受spring管理的类，想要获取受spring管理的bean 只要获取到spring容器就可以从容器中获取
@Slf4j
@Component
public class LoginContextUtils {

    /**
     *
     * @param
     * @return 如果是后台需要返回employee，如果是前台返回user
     */
    public  Object getLoginUser(String token) throws Exception {
        //String token = request.getHeader("token");
        if (StringUtils.isEmpty(token))
            return null;
        //获取公钥
        PublicKey publicKey = RsaUtils.getPublicKey(JwtUtils.class.getClassLoader().getResource("hrm_auth_rsa.pub").getFile());
        //通过公钥解析token，登陆载荷体
        Payload<PayLoadData> payload = JwtUtils.getInfoFromToken(token, publicKey, PayLoadData.class);
        PayLoadData payloadData = payload.getUserInfo();
        if (payloadData==null){
            log.error("payloadData is null!");
            return null;
        }
        return payloadData.getLoginInfo()!=null?payloadData.getLoginInfo():null;
    }

    public Long getUserId(String token) throws Exception {
        JSONObject loginUser = (JSONObject) getLoginUser(token);
        return loginUser.getLong("id");
    }

    public String getUserName(String token) throws Exception {
        JSONObject loginUser = (JSONObject) getLoginUser(token);
        return loginUser.getString("username");
    }
}